Refactored a bunch of duplicated code in <ostream>. Made a new routine called __put_character_sequence, and made nine places call it. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@196951 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/ostream b/include/ostream index 041314a..20587a1 100644 --- a/include/ostream +++ b/include/ostream 
@@ -729,7 +729,8 @@    template<class _CharT, class _Traits>  basic_ostream<_CharT, _Traits>& -operator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c) +__put_character_sequence(basic_ostream<_CharT, _Traits>& __os, + const _CharT* __str, size_t __len)  {  #ifndef _LIBCPP_NO_EXCEPTIONS  try @@ -740,11 +741,11 @@  {  typedef ostreambuf_iterator<_CharT, _Traits> _Ip;  if (__pad_and_output(_Ip(__os), - &__c, + __str,  (__os.flags() & ios_base::adjustfield) == ios_base::left ? - &__c + 1 : - &__c, - &__c + 1, + __str + __len : + __str, + __str + __len,  __os,  __os.fill()).failed())  __os.setstate(ios_base::badbit | ios_base::failbit); @@ -759,6 +760,14 @@  return __os;  }   + +template<class _CharT, class _Traits> +basic_ostream<_CharT, _Traits>& +operator<<(basic_ostream<_CharT, _Traits>& __os, _CharT __c) +{ +	return _VSTD::__put_character_sequence(__os, &__c, 1); +} +  template<class _CharT, class _Traits>  basic_ostream<_CharT, _Traits>&  operator<<(basic_ostream<_CharT, _Traits>& __os, char __cn) @@ -796,129 +805,28 @@  basic_ostream<char, _Traits>&  operator<<(basic_ostream<char, _Traits>& __os, char __c)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<char, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<char, _Traits> _Ip; - if (__pad_and_output(_Ip(__os), - &__c, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - &__c + 1 : - &__c, - &__c + 1, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	return _VSTD::__put_character_sequence(__os, &__c, 1);  }    template<class _Traits>  basic_ostream<char, _Traits>&  operator<<(basic_ostream<char, _Traits>& __os, signed char __c)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<char, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<char, _Traits> _Ip; - if (__pad_and_output(_Ip(__os), - (char*)&__c, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - (char*)&__c + 1 : - (char*)&__c, - (char*)&__c + 1, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);  }    template<class _Traits>  basic_ostream<char, _Traits>&  operator<<(basic_ostream<char, _Traits>& __os, unsigned char __c)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<char, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<char, _Traits> _Ip; - if (__pad_and_output(_Ip(__os), - (char*)&__c, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - (char*)&__c + 1 : - (char*)&__c, - (char*)&__c + 1, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	return _VSTD::__put_character_sequence(__os, (char *) &__c, 1);  }    template<class _CharT, class _Traits>  basic_ostream<_CharT, _Traits>&  operator<<(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<_CharT, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<_CharT, _Traits> _Ip; - size_t __len = _Traits::length(__str); - if (__pad_and_output(_Ip(__os), - __str, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - __str + __len : - __str, - __str + __len, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));  }    template<class _CharT, class _Traits> @@ -971,99 +879,23 @@  basic_ostream<char, _Traits>&  operator<<(basic_ostream<char, _Traits>& __os, const char* __str)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<char, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<char, _Traits> _Ip; - size_t __len = _Traits::length(__str); - if (__pad_and_output(_Ip(__os), - __str, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - __str + __len : - __str, - __str + __len, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	return _VSTD::__put_character_sequence(__os, __str, _Traits::length(__str));  }    template<class _Traits>  basic_ostream<char, _Traits>&  operator<<(basic_ostream<char, _Traits>& __os, const signed char* __str)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<char, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<char, _Traits> _Ip; - size_t __len = _Traits::length((const char*)__str); - if (__pad_and_output(_Ip(__os), - (const char*)__str, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - (const char*)__str + __len : - (const char*)__str, - (const char*)__str + __len, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	const char *__s = (const char *) __str; +	return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));  }    template<class _Traits>  basic_ostream<char, _Traits>&  operator<<(basic_ostream<char, _Traits>& __os, const unsigned char* __str)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<char, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<char, _Traits> _Ip; - size_t __len = _Traits::length((const char*)__str); - if (__pad_and_output(_Ip(__os), - (const char*)__str, - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - (const char*)__str + __len : - (const char*)__str, - (const char*)__str + __len, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	const char *__s = (const char *) __str; +	return _VSTD::__put_character_sequence(__os, __s, _Traits::length(__s));  }    template <class _CharT, class _Traits> @@ -1233,33 +1065,7 @@  operator<<(basic_ostream<_CharT, _Traits>& __os,  const basic_string<_CharT, _Traits, _Allocator>& __str)  { -#ifndef _LIBCPP_NO_EXCEPTIONS - try - { -#endif // _LIBCPP_NO_EXCEPTIONS - typename basic_ostream<_CharT, _Traits>::sentry __s(__os); - if (__s) - { - typedef ostreambuf_iterator<_CharT, _Traits> _Ip; - size_t __len = __str.size(); - if (__pad_and_output(_Ip(__os), - __str.data(), - (__os.flags() & ios_base::adjustfield) == ios_base::left ? - __str.data() + __len : - __str.data(), - __str.data() + __len, - __os, - __os.fill()).failed()) - __os.setstate(ios_base::badbit | ios_base::failbit); - } -#ifndef _LIBCPP_NO_EXCEPTIONS - } - catch (...) - { - __os.__set_badbit_and_consider_rethrow(); - } -#endif // _LIBCPP_NO_EXCEPTIONS - return __os; +	return _VSTD::__put_character_sequence(__os, __str.data(), __str.size());  }    template <class _CharT, class _Traits>